home *** CD-ROM | disk | FTP | other *** search
- SEQ formatted GEOS file V1.0
- Olivetti PR2300
- OP V2.0 or higher
- BLASTER'S CONVERTER V2.5
- COPE SOURCE V1.0
- DL870517
- COPE EDITOR V1.0
- ;MATH.ASSM
- ;MATH ROUTINES FOR THE ASSEMBLER
- ; GENERAL LIBRARY FILE
- ;*******
- CURNUM .BYTE 0,0
- PRENUM .BYTE 0,0
- WORD1 .BYTE 0,0
- WORD2 .BYTE 0,0
- CURFUN .BYTE 0
- PREFUN .BYTE 0
- STACK .Block 24,0
- STKPTR .BYTE 0
- CARRY .BYTE 32
- CURPRI .BYTE 0
- PREPRI .BYTE 0
- PRIFUN .BYTE 43,45,42,47,61,124,38,94
- PRILEV .BYTE 4,4,5,5,0,1,3,2
- JMPSTK JMP PSHSTK
- JMPTOL JMP TOTAL
- ;********
- STA CURFUN
- JSR FNDPRI
- STY CURPRI
- LDA RESULT
- STA CURNUM
- LDA RESULT+1
- STA CURNUM+1
- ;LDA #32
- ;STA CARRY
- LDA CURFUN
- CMP #61
- BEQ JMPTOL
- LDA Keyinlen
- BNE LOPSTK
- LDX STKPTR
- BEQ LOPSTK
- LDA CURFUN
- STA STACK,X
- ;----*
- LUPSTK LDA WORD1
- STA CURNUM
- STA RESULT
- LDA WORD1+1
- STA CURNUM+1
- STA RESULT+1
- LOPSTK
- LDX STKPTR
- BEQ JMPSTK
- LDA STACK,X
- STA PREFUN
- JSR FNDPRI
- STY PREPRI
- LDA STACK,X
- STA PRENUM+1
- LDA STACK,X
- STA PRENUM
- STX STKPTR
- LDA PREPRI
- CMP CURPRI
- BCC JMPNOT
- LDA PRENUM
- STA WORD1
- LDA PRENUM+1
- STA WORD1+1
- LDA CURNUM
- STA WORD2
- LDA CURNUM+1
- STA WORD2+1
- LDA PREFUN
- CMP #43
- BEQ JMPPLS
- CMP #45
- BEQ JMPMIN
- CMP #42
- BEQ JMPMUL
- CMP #47
- BEQ JMPDIV
- CMP #38
- BEQ JMPAND
- CMP #94
- BEQ JMPEOR
- CMP #124
- BEQ JMPORA
- ;-------*
- JMPPLS JMP PLUS
- JMPMIN JMP MINUS
- JMPDIV JMP DIVIDE
- JMPMUL JMP MULTI
- JMPNOT JMP DOTHIN
- JMPAND JMP ANDNUM
- JMPEOR JMP EORNUM
- JMPORA JMP ORANUM
- ;----*
- TOTAL
- LDA Keyinlen
- BNE TLLOOP ;IF A NUM WAS ENTERED
- ; THEN CONTINUE AS ALWAYS
- LDX STKPTR
- BEQ TLLOOP
- LDA STACK,X; PULL PREVIOUS NUM
- STA CURNUM+1 ; AND PLACE IT AS IF
- ; AS ENTERED WITH '='
- LDA STACK,X
- STA CURNUM
- STX STKPTR
- TLLOOP JSR LOPSTK
- LDX STKPTR
- BEQ EXTTTL
- LDA STACK,X
- STA PREFUN
- JSR FNDPRI
- STY PREPRI
- LDA STACK,X
- STA RESULT+1
- LDA STACK,X
- STA RESULT
- STX STKPTR
- EXTTTL
- ;--------*
- DOTHIN
- LDA STKPTR
- ADC #3
- STA STKPTR
- JMP PSHSTK
- ;-------*
- LDA WORD1
- ADC WORD2
- STA WORD1
- LDA WORD1+1
- ADC WORD2+1
- STA WORD1+1
- BCC NOADDC
- LDA #67
- STA CARRY
- NOADDC
- JMP LUPSTK
- ;----------*
- MINUS
- LDA WORD1
- SBC WORD2
- STA WORD1
- LDA WORD1+1
- SBC WORD2+1
- STA WORD1+1
- BCS NOSUBC
- LDA #67
- STA CARRY
- NOSUBC
- JMP LUPSTK
- ;---------*
- ANDNUM
- LDA WORD1
- AND WORD2
- STA WORD1
- LDA WORD1+1
- AND WORD2+1
- STA WORD1+1
- JMP LUPSTK
- ;---------*
- ORANUM
- LDA WORD1
- ORA WORD2
- STA WORD1
- LDA WORD1+1
- ORA WORD2+1
- STA WORD1+1
- JMP LUPSTK
- ;---------*
- EORNUM
- LDA WORD1
- EOR WORD2
- STA WORD1
- LDA WORD1+1
- EOR WORD2+1
- STA WORD1+1
- JMP LUPSTK
- ;---------*
- MULTI
- LDA #0
- STA HIWORD
- STA HIWORD+1
- LDX #16
- MLLOOP ROR HIWORD+1
- ROR HIWORD
- ROR WORD2+1
- ROR WORD2
- BCC NXMULT
- LDA WORD1
- ADC HIWORD
- STA HIWORD
- LDA WORD1+1
- ADC HIWORD+1
- STA HIWORD+1
- NXMULT DEX
- BPL MLLOOP
- LDA HIWORD
- ORA HIWORD+1
- BEQ MULTI1
- LDA #67
- STA CARRY
- MULTI1
- LDA WORD2
- STA CURNUM
- STA RESULT
- LDA WORD2+1
- STA CURNUM+1
- STA RESULT+1
- JMP LOPSTK
- HIWORD .BYTE 0,0
- ;---------*
- DIVIDE
- LDA #0
- STA HIWORD
- STA HIWORD+1
- LDA WORD2
- ORA WORD2+1
- BNE DIVOK
- BCS DVDERR
- DIVOK
- LDX #16
- DVLOOP
- ROL WORD1
- ROL WORD1+1
- ROL HIWORD
- ROL HIWORD+1
- LDA HIWORD
- SBC WORD2
- LDA HIWORD+1
- SBC WORD2+1
- BCC DIVLP2
- STY HIWORD
- STA HIWORD+1
- DIVLP2
- BNE DVLOOP
- ROL WORD1
- ROL WORD1+1
- LDA HIWORD
- ORA HIWORD+1
- BEQ DVIDE1
- LDA #67
- STA CARRY
- DVIDE1
- JMP LUPSTK
- DVDERR RTS
- ;----------*
- PSHSTK
- LDX STKPTR
- LDA CURNUM
- STA STACK,X
- LDA CURNUM+1
- STA STACK,X
- LDA CURFUN
- STA STACK,X
- STX STKPTR
- ;--------*
- FNDPRI
- ; ON ENTRY A HOLDS VALUE TO LOOK UP
- ; ON EXIT Y HOLDS THE PRIORITY LEVEL.
- ; A&X CANNOT BE CHANGED.
- STA FNDAVL
- STX FNDXVL
- LDX #255
- PRLOOP INX
- CMP PRIFUN,X
- BNE PRLOOP
- LDY PRILEV,X
- LDA FNDAVL
- LDX FNDXVL
- FNDAVL .BYTE 0
- FNDXVL .BYTE 0
-